﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using UtilityExtensions;
using DAL;
using System.Reflection;
using BOL;
using System.Drawing;
using System.Net;
using System.IO;
using Microsoft.Office.Core;
using Word = Microsoft.Office.Interop.Word;
using System.Data.SqlClient;
using Website.Logger;
using System.Reflection;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System.Text.RegularExpressions;
using System.Xml;
using System.Xml.Linq;
using iTextSharp.text.pdf;

using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.IO.Packaging;

 
 



namespace UILGestion.Rpt
{
    public partial class MakeDoc : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            try
            {
                LoadDocumento();
            }
            catch (SqlException sqlex)
            {

                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
                //WebServerSideError.Log(ex);
                //ScriptManager.RegisterClientScriptBlock(this, typeof(Page),
                // "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
            
            
        }
        private void LoadDocumento()
        {
            var login = Session["idEmpleado"];
            if (login == null) { throw new Exception("Debe Ingresar al sistema"); }
            string type= Request.QueryString["idContrato"];
            switch (type)
            {

                case "63": //separacion
                    LoadContratoSep();
                    break;
                case "65":
                    LoadContratoVenta();
                    break;
    
            }
        }


        private void LoadContratoSep()
        {
            

            var archivo =DbUtil.Db.Archivos.Single(p=>p.idInternal==Request.QueryString["idArchivo"].ToInt());
            var ordenVenta = DbUtil.Db.OrdenVentas.SingleOrDefault(p => p.idInternal == Request.QueryString["idOrdenVenta"].ToInt());

            string directorio = Server.MapPath("~/App_Data/");
            string nombreFile = "CONTSEP_OV_{0}.doc".Fmt(ordenVenta.numDocumento);
            string tmp = "C:\\tmp\\temp_{0}_{1}".Fmt(ordenVenta.numDocumento,ordenVenta.Cliente.descripcion);
            object outputFileName = "C:\\tmp\\{0}".Fmt(nombreFile.Replace(' ','_'));

            string template = Server.MapPath("~/App_Data/{0}/{1}".Fmt(archivo.ruta,archivo.descripcion));
            string docText; 
            
            try
            {
                //Application.StartupPath,  carpeta bin
                File.Copy(template, Path.Combine(tmp), true);  //copia
                
                using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(tmp, true))
                {

                using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
                {
                    docText = sr.ReadToEnd();
                }
                docText = new Regex("NOMBREAPELLIDOS001").Replace(docText, ordenVenta.Cliente.descripcion);
                docText = new Regex("DNI002").Replace(docText, ordenVenta.Cliente.numDocumento);
                docText = new Regex("ESTADOCIVIL003").Replace(docText, ordenVenta.Cliente.GrupoDatoitem2.descripcion + "(a)");
                docText = new Regex("NOMBREAPELLIDOs004").Replace(docText, ordenVenta.idCoCliente != null ? ordenVenta.Cliente1.descripcion : "XXXXXXXX");
                docText = new Regex("DNI005").Replace(docText, ordenVenta.idCoCliente != null ? ordenVenta.Cliente1.numDocumento : "XXXX");
                docText = new Regex("DIRECCION006").Replace(docText, ordenVenta.Cliente.Direccion.descripcion);

                var OVItem = ordenVenta.OrdenVentaItems.First();
                docText = new Regex("ETAPA007").Replace(docText, OVItem.UI.Etapa.nombre);
                docText = new Regex("LOCALIZACION008").Replace(docText, OVItem.UI.UILocalizacion.descripcion);
                docText = new Regex("CODIGO009").Replace(docText, OVItem.UI.descripcion);
                docText = new Regex("AREAOCUPADA010").Replace(docText, OVItem.UI.areaOcupada.Value.ToString("N"));
                docText = new Regex("AREATECHADA011").Replace(docText, OVItem.UI.areaTechada.Value.ToString("N"));
                docText = new Regex("PRECIO012").Replace(docText, OVItem.total.ToString("N"));
                docText = new Regex("SIM013").Replace(docText, ordenVenta.Moneda.simbol);
                docText = new Regex("SEPARACION014").Replace(docText, OVItem.OrdenVentaFormatos.Single(p => p.idConcepto == 4).total.ToString("N"));

                docText = new Regex("CONTADO015").Replace(docText, (ordenVenta.idFormatoVenta == 1 | ordenVenta.idFormatoVenta == 4) ? "X" : "_");
                docText = new Regex("CHEDITO016").Replace(docText, ordenVenta.FormatoVenta.bitCH ? "X" : "_");
                 docText = new Regex("AHORROCASA17").Replace(docText, ordenVenta.cuentaAhorro == 1 ? "X" : "_");
                            int total=0;

                            if (OVItem.UI.idTipoUI == 1)//departamento
                            {
                                total = OVItem.UI.dormitorios;
                            }
                            else
                            {
                                if (OVItem.UI.dormitorio1.ToInt() > 0)
                                    total++;

                                if (OVItem.UI.dormitorio2.ToInt() > 0)
                                    total++;
                                if (OVItem.UI.dormitorio3.ToInt() > 0)
                                    total++;
                                if (OVItem.UI.dormitorio4.ToInt() > 0)
                                    total++;
                            }

                    int d,m,a;  
               String []Mes={"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"};  
                d= DateTime.Now.Day;
                m = DateTime.Now.Month;
                a = DateTime.Now.Year;

                var terminado = DateTime.Now.AddDays(30);

                d = terminado.Day;
                m = terminado.Month;
                a = terminado.Year;


                string fecLet=d+" de "+Mes[m-1]+" del "+a;
                string fecTermino = d + " de " + Mes[m - 1] + " del " + a;                  



                    docText = new Regex("NUMDORMITORIOS018").Replace(docText, total.ToString() );
                    //docText = new Regex("PRECIOLET019").Replace(docText, Util.enletras(OVItem.total.ToString()));
                    //docText = new Regex("SEPARACIONLET020").Replace(docText, Util.enletras(OVItem.OrdenVentaFormatos.Single(p => p.idConcepto == 4).total.ToString()));
                    
                    docText = new Regex("FECHALET021").Replace(docText,fecLet);
                    docText = new Regex("FECHATERM021").Replace(docText, fecTermino);                     
                    
                
               using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
                        {
                            sw.Write(docText);

                        }
                }

                Response.Clear();
                Response.ContentType = archivo.tipo;
                Response.AddHeader("Content-disposition", "attachment; filename=".Fmt(outputFileName));
                Response.WriteFile(tmp);
                Response.Flush();
                Response.Close();
              
                
            }
            catch (Exception ex)
            {
                //((Word._Application)wordApp).Quit(ref missing, ref missing, ref missing);
                //word = null;
                throw ex;

            }
            
        }


        private void LoadContratoVenta()
        {


            var archivo = DbUtil.Db.Archivos.Single(p => p.idInternal == Request.QueryString["idArchivo"].ToInt());
            var ordenVenta = DbUtil.Db.OrdenVentas.SingleOrDefault(p => p.idInternal == Request.QueryString["idOrdenVenta"].ToInt());

            string directorio = Server.MapPath("~/App_Data/");
            string nombreFile = "CONTVENTA_OV_{0}.doc".Fmt(ordenVenta.numDocumento);
            string tmp = "C:\\tmp\\temp_{0}_{1}".Fmt(ordenVenta.numDocumento, ordenVenta.Cliente.descripcion);
            object outputFileName = "C:\\tmp\\{0}".Fmt(nombreFile.Replace(' ', '_'));

            string template = Server.MapPath("~/App_Data/{0}/{1}".Fmt(archivo.ruta, archivo.descripcion));
            string docText;
            string docheText;
            

            try
            {
                //Application.StartupPath,  carpeta bin
                File.Copy(template, Path.Combine(tmp), true);  //copia

                using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(tmp, true))
                {


                    using (StreamReader sh = new StreamReader(wordDoc.MainDocumentPart.HeaderParts.ElementAt(0).GetStream()))
                    {
                        docheText = sh.ReadToEnd();

                    }
                    docheText = docheText.Replace("ORDEN022", ordenVenta.numDocumento);

                    Stream headerStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(docheText));
                    WDAddHeader( wordDoc, headerStream);
            
                    using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
                    {
                        docText = sr.ReadToEnd();
                    }

                   // var hea = wordDoc.MainDocumentPart.HeaderParts;

                    
                    String[] Mes = { "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };
                    ///---------CORRELATIVO-------
                    docText = new Regex("ORDEN022").Replace(docText, ordenVenta.numDocumento);
                    

                    ////--ANEXO  -----1
                    ///--------PROPIETARIO  y conyuge
                    docText = new Regex("NOMBREAPELLIDOS001").Replace(docText, ordenVenta.Cliente.descripcion.ToUpper());
                    docText = new Regex("DNI002").Replace(docText, ordenVenta.Cliente.numDocumento);
                    docText = new Regex("ESTADOCIVIL003").Replace(docText, ordenVenta.Cliente.GrupoDatoitem2.descripcion + "(a)");

                    docText = new Regex("NOMBREAPELLIDOS004").Replace(docText, ordenVenta.Cliente.conyuge.Length > 0 ? ordenVenta.Cliente.conyuge.ToUpper() : "XXXXXXXX");
                    docText = new Regex("DNI005").Replace(docText, ordenVenta.Cliente.DNIConyuge.Length > 0 ? ordenVenta.Cliente.DNIConyuge : "XXXXXXXX");
                    
                    string direccion =(ordenVenta.Cliente.Direccion.descripcion.Length>0)? ordenVenta.Cliente.Direccion.descripcion.ToUpper() +
                                        ",DISTRITO DE " + ordenVenta.Cliente.Direccion.Distrito.VC_NOMBRE.ToUpper() +
                                        ",PROVINCIA DE " + ordenVenta.Cliente.Direccion.Distrito.Provincia.VC_NOMBRE.ToUpper() +
                                        ",DEPARTAMENTO DE " + ordenVenta.Cliente.Direccion.Distrito.Provincia.Ciudade.VC_NOMBRE.ToUpper():"XXXXXXXX";

                    docText = new Regex("DIRECCION006").Replace(docText, direccion);



                    ///--------COPROPIETARIO
                    docText = new Regex("NOMBREAPELLIDOS023").Replace(docText, ordenVenta.idCoCliente != null ? ordenVenta.Cliente1.descripcion.ToUpper() : "XXXXXXXX");
                    docText = new Regex("DNI024").Replace(docText, ordenVenta.idCoCliente != null ? ordenVenta.Cliente1.numDocumento : "XXXXXXXX");
                    docText = new Regex("ESTADOCIVIL025").Replace(docText, ordenVenta.idCoCliente != null ?ordenVenta.Cliente1.GrupoDatoitem2.descripcion + "(a)":"XXXXXXXX");

                    docText = new Regex("NOMBREAPELLIDOS026").Replace(docText,ordenVenta.idCoCliente != null ? ( ordenVenta.Cliente1.conyuge.Length > 0 ? ordenVenta.Cliente1.conyuge.ToUpper() : "XXXXXXXX"):"XXXXXXXX");
                    docText = new Regex("DNI027").Replace(docText, ordenVenta.idCoCliente != null ?            (ordenVenta.Cliente1.DNIConyuge.Length > 0 ? ordenVenta.Cliente1.DNIConyuge : "XXXXXXXX"):"XXXXXXXX");

                    string direccion1 = ordenVenta.Cliente1!=null? ((ordenVenta.Cliente.Direccion.descripcion.Length > 0) ? ordenVenta.Cliente.Direccion.descripcion.ToUpper() +
                                ",DISTRITO DE " + ordenVenta.Cliente.Direccion.Distrito.VC_NOMBRE.ToUpper() +
                                ",PROVINCIA DE " + ordenVenta.Cliente.Direccion.Distrito.Provincia.VC_NOMBRE.ToUpper() +
                                ",DEPARTAMENTO DE " + ordenVenta.Cliente.Direccion.Distrito.Provincia.Ciudade.VC_NOMBRE.ToUpper() : "XXXXXXXX"):"XXXXXXXX";

                    docText = new Regex("DIRECCION028").Replace(docText, direccion1);

                    ///----------------OTRO COMPRADORA----------------------------
                    
                    docText = new Regex("NOMBREAPELLIDO029").Replace(docText, "XXXXXXXXXXXXXXXXXXXXXXXXX");
                    docText = new Regex("DNI030").Replace(docText, "XXXXXXXXXXXXXXXXXXXXXXXXX");
                    docText = new Regex("PARTIDA031").Replace(docText, "XXXXXXXXXXXXXXXXXXXXXXXXX");
                    docText = new Regex("DIRECCION032").Replace(docText, "XXXXXXXXXXXXXXXXXXXXXXXXX");
                    
                    //-----------------------VENDEDOR------------------------------
                    string nombre = ordenVenta.Empleado.nombre + " " + ordenVenta.Empleado.apePaterno + " " + ordenVenta.Empleado.apeMaterno;
                    docText = new Regex("VENDEDOR021").Replace(docText, nombre);
                     

                    //-----------por cada  registro de  inmobiliario

                    //verificamos si existe del tipo  D,DE,DD,EE,DEE,DDE,E

                   
                        if (ordenVenta.OrdenVentaItems.Count <=3 )
                        {
                           
	                                            var item=ordenVenta.OrdenVentaItems.ElementAt(0);

                                                docText = new Regex("DEPARTAMEN50").Replace(docText, item.UI.UITipo.descripcion.ToUpper());
                                                docText = new Regex("ETAPA007").Replace(docText,  item.UI.idTipoUI!=3?item.UI.Etapa.descripcion.ToUpper():"NO APLICABLE");
                                                docText = new Regex("LOCALIZACION008").Replace(docText, item.UI.idTipoUI!=3?item.UI.UILocalizacion.descripcion.ToUpper():"NO APLICABLE");
                                                docText = new Regex("CODIGO009").Replace(docText, item.UI.descripcion.ToUpper());
                                                docText = new Regex("PISO51").Replace(docText, item.UI.idTipoUI!=3?item.UI.UIBloque.descripcion:"NO APLICABLE");
                                                docText = new Regex("AREATECHADA011").Replace(docText, item.UI.areaOcupada.Value.ToString("N") + "m2");
                                                docText = new Regex("AREAOCUPADA010").Replace(docText, item.UI.areaTechada.Value.ToString("N") + "m2");

                                                
                                                ////------------PRECIOS-------------
                                                //docText = new Regex("PRECIO012").Replace(docText, string.Format("{0} {1:N2}", ordenVenta.Moneda.simbol, item.total.ToString("N")));
                                                //docText = new Regex("PRECIOLET019").Replace(docText, Util.enletras(item.total.ToString()) + " y 00/100 Nuevos Soles");

                                                //-----------PAGOS
                                                    
                              var formatosIDs=item.OrdenVentaFormatos.Select(p=>p.idInternal);
                                                
                                                //CAJA
                                                var pagos = DbUtil.Db.RendicionVentaItems.Where(p => formatosIDs.Contains(p.idOrdenVentaFormato));
                                                //-------------------------------------------------
                                                var SEP =pagos.Where(p=>p.OrdenVentaFormato.idConcepto==4);
                                                var CI = pagos.Where(p => p.OrdenVentaFormato.idConcepto != 4 & p.OrdenVentaFormato.idConcepto != 2 & p.OrdenVentaFormato.idConcepto != 3).ToList();
                                                var liquidacionCI=DbUtil.Db.LiquidacionVentas.Where(p=>(CI.Select(w=>w.idRendicionVenta)).Contains(p.idRendicionVenta));

                                                //--verificamos que el total del pago  de la cuota inicial
                                                decimal  separacion = item.OrdenVentaFormatos.Single(p => p.idConcepto == 4).totalPago;
                                                string fechaSeparacion =separacion!=0?SEP.First().RendicionVenta.LiquidacionVentas.First().fechaDeposito.ToShortDateString() :"";
                                                decimal  totalCI =CI.Count()>0? CI.Sum(p=>p.total):0;
                                                string  fechaCI=totalCI!=0?liquidacionCI.Max(p=>p.fechaDeposito).ToShortDateString():"";

                                                docText = new Regex("PAGOSEP035").Replace(docText, string.Format("{0} {1:N2}", ordenVenta.Moneda.simbol, separacion));
                                                docText = new Regex("PAGOINI035").Replace(docText, string.Format("{0} {1:N2}", ordenVenta.Moneda.simbol, totalCI));
                                                docText = new Regex("FESEP036").Replace(docText, string.Format("{0}", fechaSeparacion));
                                                docText = new Regex("FEULT036").Replace(docText, string.Format("{0}", fechaCI));

                                                docText = new Regex("TOTAL044").Replace(docText, string.Format("{0} {1:N2}", ordenVenta.Moneda.simbol, totalCI + separacion));
                            

                                                docText = new Regex("SALDO038").Replace(docText, string.Format("{0} {1:N2}", ordenVenta.Moneda.simbol, (item.total - separacion - totalCI)));
                                                docText = new Regex("BANCO037").Replace(docText, string.Format("Fondos propios / Crédito Hipotecario – Banco: {0}", (item.bitFinanciado == true ? (item.OrdenVenta.idBanco!=null?item.OrdenVenta.Banco.descripcion:"") : "")));


                                            OrdenVentaItem item2=null;
                                            OrdenVentaItem item3=null;

                                            if (ordenVenta.OrdenVentaItems.Count>1)
                                            {
                                                 item2 = ordenVenta.OrdenVentaItems.ElementAt(1);


                                                 docText = new Regex("ESTACIONAMI52").Replace(docText, (item2 != null ? item2.UI.UITipo.descripcion.ToUpper() : ""));
                                                docText = new Regex("ETAPA054").Replace(docText,(item2!=null? item2.UI.idTipoUI != 3 ? item2.UI.Etapa.descripcion.ToUpper() : "NO APLICABLE":""));
                                                docText = new Regex("LOCALIZACION055").Replace(docText, (item2!=null?item2.UI.idTipoUI != 3 ? item2.UI.UILocalizacion.descripcion.ToUpper() : "NO APLICABLE":""));
                                                docText = new Regex("CODIGO056").Replace(docText,(item2!=null? item2.UI.descripcion.ToUpper():""));
                                                docText = new Regex("PISO57").Replace(docText, (item2 != null ? item2.UI.idTipoUI != 3 ? item2.UI.UIBloque.descripcion.ToUpper() : "NO APLICABLE" : ""));
                                                docText = new Regex("AREATECHADA058").Replace(docText,(item2!=null? item2.UI.areaOcupada.Value.ToString("N") + "m2":""));
                                                docText = new Regex("AREAOCUPADA059").Replace(docText,(item2!=null? item2.UI.areaTechada.Value.ToString("N") + "m2":""));
                                                //------------PRECIOS-------------
                                                docText = new Regex("PRECIO013").Replace(docText, (item2 != null ? string.Format("{0} {1:N2}", ordenVenta.Moneda.simbol, item2.total.ToString("N")) : ""));
                                                //docText = new Regex("PRECIOLET013").Replace(docText, (item2 != null ? Util.enletras(item2.total.ToString()) + " y 00/100 Nuevos Soles" : ""));

                                                

                                                var formatosIDs2 = item2.OrdenVentaFormatos.Select(p => p.idInternal);

                                                //CAJA
                                                var pagos2 = DbUtil.Db.RendicionVentaItems.Where(p => formatosIDs2.Contains(p.idOrdenVentaFormato));
                                                //-------------------------------------------------
                                                var SEP2 = pagos2.Where(p => p.OrdenVentaFormato.idConcepto == 4);
                                                var CI2 = pagos2.Where(p => p.OrdenVentaFormato.idConcepto != 4 & p.OrdenVentaFormato.idConcepto != 2 & p.OrdenVentaFormato.idConcepto != 3).ToList();
                                                var liquidacionCI2 = DbUtil.Db.LiquidacionVentas.Where(p => (CI2.Select(w => w.idRendicionVenta)).Contains(p.idRendicionVenta));

                                                //--verificamos que el total del pago  de la cuota inicial
                                                decimal separacion2 = item2.OrdenVentaFormatos.Single(p => p.idConcepto == 4).totalPago;
                                                string fechaSeparacion2 = separacion2 != 0 ? SEP2.First().RendicionVenta.LiquidacionVentas.First().fechaDeposito.ToShortDateString() : "";
                                                decimal totalCI2 = CI2.Count() > 0 ? CI2.Sum(p => p.total) : 0;
                                                string fechaCI2 = totalCI2 != 0 ? liquidacionCI2.Max(p => p.fechaDeposito).ToShortDateString() : "";

                                                docText = new Regex("PAGOSEP039").Replace(docText, string.Format("{0} {1:N2}", ordenVenta.Moneda.simbol, separacion2));
                                                docText = new Regex("PAGOINI039").Replace(docText, string.Format("{0} {1:N2}", ordenVenta.Moneda.simbol, totalCI2));
                                                docText = new Regex("FESEP040").Replace(docText, string.Format("{0}", fechaSeparacion2));
                                                docText = new Regex("FEULT040").Replace(docText, string.Format("{0}", fechaCI2));
                                                docText = new Regex("TOTAL045").Replace(docText, string.Format("{0} {1:N2}", ordenVenta.Moneda.simbol, totalCI2 + separacion2));

                                                docText = new Regex("SALDO041").Replace(docText, (item2 != null ?( string.Format("{0} {1:N2}",ordenVenta.Moneda.simbol, (item2.total - separacion2 - totalCI2))):""));
                                                docText = new Regex("BANCO038").Replace(docText, (item2 != null ?(string.Format("Fondos propios / Crédito Hipotecario – Banco: {0}",  (item2.bitFinanciado == true ?
                                                                                                                                                                                        (item2.OrdenVenta.idBanco!=null?item2.OrdenVenta.Banco.descripcion:"") 
                                                                                                                                                                                        : "")
                                                                                                                                                                                        )):""));
                                              

                                            }
                                            if (ordenVenta.OrdenVentaItems.Count > 2)
                                            {
                                                item3 = ordenVenta.OrdenVentaItems.ElementAt(2);


                                                docText = new Regex("ESTACIONAMI53").Replace(docText, (item3 != null ? item3.UI.UITipo.descripcion.ToUpper() : ""));
                                                docText = new Regex("ETAPA060").Replace(docText,(item3!=null? item3.UI.idTipoUI != 3 ? item.UI.Etapa.descripcion.ToUpper() : "NO APLICABLE": ""));
                                                docText = new Regex("LOCALIZACION061").Replace(docText,(item3!=null? item3.UI.idTipoUI != 3 ? item.UI.UILocalizacion.descripcion.ToUpper() : "NO APLICABLE": ""));
                                                docText = new Regex("CODIGO062").Replace(docText,(item3!=null? item3.UI.descripcion.ToUpper(): ""));
                                                docText = new Regex("PISO63").Replace(docText,(item3!=null? item3.UI.idTipoUI != 3 ? item.UI.UIBloque.descripcion.ToUpper() : "NO APLICABLE": ""));
                                                docText = new Regex("AREATECHADA064").Replace(docText,(item3!=null? item3.UI.areaOcupada.Value.ToString("N") + "m2": ""));
                                                docText = new Regex("AREAOCUPADA065").Replace(docText,(item3!=null? item3.UI.areaTechada.Value.ToString("N") + "m2": ""));
                                                
                                                //------------PRECIOS-------------
                                                docText = new Regex("PRECIO014").Replace(docText, (item2 != null ? string.Format("{0} {1:N2}", ordenVenta.Moneda.simbol, item3.total.ToString("N")) : ""));
                                                //docText = new Regex("PRECIOLET014").Replace(docText, (item2 != null ? Util.enletras(item3.total.ToString()) + " y 00/100 Nuevos Soles" : ""));



                                                var formatosIDs3 = item3.OrdenVentaFormatos.Select(p => p.idInternal);

                                                //CAJA
                                                var pagos3 = DbUtil.Db.RendicionVentaItems.Where(p => formatosIDs3.Contains(p.idOrdenVentaFormato));
                                                //-------------------------------------------------
                                                var SEP3 = pagos3.Where(p => p.OrdenVentaFormato.idConcepto == 4);
                                                var CI3 = pagos3.Where(p => p.OrdenVentaFormato.idConcepto != 4 & p.OrdenVentaFormato.idConcepto != 2 & p.OrdenVentaFormato.idConcepto != 3).ToList();
                                                var liquidacionCI3 = DbUtil.Db.LiquidacionVentas.Where(p => (CI3.Select(w => w.idRendicionVenta)).Contains(p.idRendicionVenta));

                                                //--verificamos que el total del pago  de la cuota inicial
                                                decimal separacion3 = item3.OrdenVentaFormatos.Single(p => p.idConcepto == 4).totalPago;
                                                string fechaSeparacion3 = separacion3 != 0 ? SEP3.First().RendicionVenta.LiquidacionVentas.First().fechaDeposito.ToShortDateString() : "";
                                                decimal totalCI3 = CI3.Count() > 0 ? CI3.Sum(p => p.total) : 0;
                                                string fechaCI3 = totalCI3 != 0 ? liquidacionCI3.Max(p => p.fechaDeposito).ToShortDateString() : "";

                                                docText = new Regex("PAGOSEP042").Replace(docText, string.Format("{0} {1:N2}", ordenVenta.Moneda.simbol, separacion3));
                                                docText = new Regex("PAGOINI042").Replace(docText, string.Format("{0} {1:N2}", ordenVenta.Moneda.simbol, totalCI3));
                                                docText = new Regex("FESEP041").Replace(docText, string.Format("{0}", fechaSeparacion3));
                                                docText = new Regex("FEULT041").Replace(docText, string.Format("{0}", fechaCI3));
                                                docText = new Regex("TOTAL046").Replace(docText, string.Format("{0} {1:N2}", ordenVenta.Moneda.simbol, totalCI3+separacion3));       

                                                docText = new Regex("SALDO042").Replace(docText, (item2 != null ? (string.Format("{0} {1:N2}", ordenVenta.Moneda.simbol, (item3.total - separacion3 - totalCI3))) : ""));
                                                docText = new Regex("BANCO043").Replace(docText, (item2 != null ? (string.Format("Fondos propios / Crédito Hipotecario – Banco: {0}", (item3.bitFinanciado == true ?
                                                                                                                                                                                        (item3.OrdenVenta.idBanco != null ? item3.OrdenVenta.Banco.descripcion : "")
                                                                                                                                                                                        : "")
                                                                                                                                                                                        )) : ""));

                                            }
                        }
                        else
                        {
                            throw new Exception("Verifique Modelo de Contradto,Comunicar al area de sistema");
                        }


                    //-------------------------------------------------
                    var OVItem = ordenVenta.OrdenVentaItems.First();
                    //int totalDormitorio = 0;

                    //if (OVItem.UI.idTipoUI == 1)
                    //{
                    //    totalDormitorio = OVItem.UI.dormitorios; //departamento
                    //}
                    //else
                    //{
                    //    if (OVItem.UI.dormitorio1.ToInt() > 0) totalDormitorio++;
                    //    if (OVItem.UI.dormitorio2.ToInt() > 0) totalDormitorio++;
                    //    if (OVItem.UI.dormitorio3.ToInt() > 0) totalDormitorio++;
                    //    if (OVItem.UI.dormitorio4.ToInt() > 0) totalDormitorio++;
                    //}

                        string fechaentrega = OVItem.UI.Etapa.fechaFin.Day + " de " + Mes[OVItem.UI.Etapa.fechaFin.Month - 1] + " del " + OVItem.UI.Etapa.fechaFin.Year;

                   
                    string fechaImpresion = DateTime.Now.Day + " de " + Mes[DateTime.Now.Month - 1] + " del " + DateTime.Now.Year;

                    docText = new Regex("FECHAENTREGA033").Replace(docText, fechaentrega);
                    docText = new Regex("FECHAIMPRESION034").Replace(docText, fechaImpresion);
                     
                    //-----------------------------------
                    //PAGO DE SEPARACION,CI


   



                    //---------------------
                     docText = new Regex("SCC015").Replace(docText, OVItem.UI.salaComedorCocina.ToString());
                     docText = new Regex("DORMITORIO1016").Replace(docText, OVItem.UI.dormitorio1.ToString());
                     docText = new Regex("DORMITORIO2017").Replace(docText, OVItem.UI.dormitorio2.ToString());
                     docText = new Regex("BANIO018").Replace(docText, OVItem.UI.banio1.ToString());
                     docText = new Regex("PATIO035").Replace(docText, OVItem.UI.patioLabanderia.ToString());

                              
                    using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
                    {
                        sw.Write(docText);

                    }
                }

                Response.Clear();
                Response.ContentType = archivo.tipo;
                Response.AddHeader("Content-disposition", "attachment; filename=".Fmt(outputFileName));
                Response.WriteFile(tmp);
                Response.Flush();
                Response.Close();


            }
            catch (Exception ex)
            {
                //((Word._Application)wordApp).Quit(ref missing, ref missing, ref missing);
                //word = null;
                throw ex;

            }

        }




        public void WDAddHeader(WordprocessingDocument wdDoc, Stream headerContent)
        {
            // Given a document name, and a stream containing valid header content,
            // add the stream content as a header in the document and remove the original headers

            const string wordmlNamespace = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
            const string relationshipNamespace = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";

            
            // Delete existing header part.
                wdDoc.MainDocumentPart.DeleteParts(wdDoc.MainDocumentPart.HeaderParts);

            // Create a new header part.
                HeaderPart headerPart = wdDoc.MainDocumentPart.AddNewPart<HeaderPart>();
                string rId = wdDoc.MainDocumentPart.GetIdOfPart(headerPart);
                XmlDocument headerDoc = new XmlDocument();
                headerContent.Position = 0;
                headerDoc.Load(headerContent);

            // Write the header out to its part.
                headerDoc.Save(headerPart.GetStream());

            // Manage namespaces to perform Xml XPath queries.
                NameTable nt = new NameTable();
                XmlNamespaceManager nsManager = new XmlNamespaceManager(nt);
                nsManager.AddNamespace("w", wordmlNamespace);

            // Get the document part from the package.
            // Load the XML in the part into an XmlDocument instance.
                XmlDocument xdoc = new XmlDocument(nt);
                xdoc.Load(wdDoc.MainDocumentPart.GetStream());

            // Find the node containing the document layout.
                XmlNodeList targetNodes = xdoc.SelectNodes("//w:sectPr", nsManager);
                foreach (XmlNode targetNode in targetNodes)
                {
            // Delete any existing references to headers.
                    XmlNodeList headerNodes = targetNode.SelectNodes("./w:headerReference", nsManager);
                    foreach (System.Xml.XmlNode headerNode in headerNodes)
                    {
                        targetNode.RemoveChild(headerNode);
                    }

            // Create the new header reference node.
                    XmlElement node = xdoc.CreateElement("w:headerReference", wordmlNamespace);
                    XmlAttribute attr = node.Attributes.Append(xdoc.CreateAttribute("r:id", relationshipNamespace));
                    attr.Value = rId;
                    node.Attributes.Append(attr);
                    targetNode.InsertBefore(node, targetNode.FirstChild);
                }

            // Save the document XML back to its part.
                xdoc.Save(wdDoc.MainDocumentPart.GetStream(FileMode.Create));
            
        }



        public string GetFooter()
        {

            string footerVal = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?><w:ftr xmlns:ve=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\"><w:p w:rsidR=\"00C24C70\" w:rsidRDefault=\"00C24C70\"><w:pPr><w:pStyle w:val=\"Footer\" /></w:pPr><w:r><w:t>Hi</w:t></w:r></w:p><w:p w:rsidR=\"00C24C70\" w:rsidRDefault=\"00C24C70\"><w:pPr><w:pStyle w:val=\"Footer\" /></w:pPr></w:p></w:ftr>";

            return footerVal;

        }

        public string GetHeader()
        {

            string headerVal = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?><w:hdr xmlns:ve=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\"><w:p w:rsidR=\"00C8737A\" w:rsidRDefault=\"00C8737A\"><w:pPr><w:pStyle w:val=\"Header\" /></w:pPr><w:r><w:t>hello</w:t></w:r></w:p><w:p w:rsidR=\"00C8737A\" w:rsidRDefault=\"00C8737A\"><w:pPr><w:pStyle w:val=\"Header\" /> </w:pPr></w:p></w:hdr>";

            return headerVal;

        }

      


    }
}